//door.txt - Standard door script.
//Cell 0,1 - If both 0, always opens. Otherwise, only opens if this flag is > 0.
// Cell 2 - Special cutscene door. If 1, once open, never closes unless its blockage flag is 0.
//    Also, if the flag to enable it to open becomes 0, it closes no matter what

beginobjectscript; // basic door

variables;

short can_close = 0;
short open_range = 2;
short kludge_force = 0;

body;

beginstate INIT_STATE;
	break;

beginstate DEAD_STATE;

break;

beginstate START_STATE; // door closed, waiting
	kludge_force = 0;
	
	if (get_memory_cell(2) > 0)
		open_range = 5;
	if ((get_memory_cell(0) == 5) && (get_memory_cell(1) == 20) && (gf(5,20) > 0)) 
		kludge_force = 1; //### remove this in later games	

	if ((get_memory_cell(0) > 0) || (get_memory_cell(1) > 0)) {
		if (get_sdf(get_memory_cell(0),get_memory_cell(1)) == 0)
			break;
		}
	if ((get_nearest_char(open_range) >= 0) || (kludge_force > 0)) {
		pc_heard_sound(134);
		if (object_type(ME) == 50)
			run_object_animation(1,0,35);
		if (object_type(ME) == 52)
			run_object_animation(2,0,35);
		if (object_type(ME) == 54)
			run_object_animation(3,0,35);
		if (object_type(ME) == 56)
			run_object_animation(4,0,35);
		set_state(3);
		}
break;

beginstate 3; // door opening
	if (am_i_doing_action() == FALSE) {
		if (object_type(ME) == 50)
			set_object_icon(ME,2);
		if (object_type(ME) == 52)
			set_object_icon(ME,3);
		if (object_type(ME) == 54)
			set_object_icon(ME,6);
		if (object_type(ME) == 56)
			set_object_icon(ME,7);
		set_object_blockage(ME,0);
		set_state(4);
		}
break;

beginstate 4; // door open
	can_close = 1;
	if (get_memory_cell(2) > 0)
		can_close = 0;
	if ((get_memory_cell(0) > 0) || (get_memory_cell(1) > 0)) {
		if (get_sdf(get_memory_cell(0),get_memory_cell(1)) == 0)
			can_close = 2;
		}
		
	if (((get_nearest_char(2) < 0) && (can_close > 0)) || ((get_memory_cell(2) > 0) && (can_close == 2))) {
		pc_heard_sound(134);
		if (object_type(ME) == 50)
			run_reverse_object_animation(1,35);
		if (object_type(ME) == 52)
			run_reverse_object_animation(2,35);
		if (object_type(ME) == 54)
			run_reverse_object_animation(3,35);
		if (object_type(ME) == 56)
			run_reverse_object_animation(4,35);
		set_object_blockage(ME,1);
		set_state(5);
		}
break;

beginstate 5; // door closing
	if (am_i_doing_action() == FALSE) {
		if (object_type(ME) == 50)
			set_object_icon(ME,0);
		if (object_type(ME) == 52)
			set_object_icon(ME,1);
		if (object_type(ME) == 54)
			set_object_icon(ME,4);
		if (object_type(ME) == 56)
			set_object_icon(ME,5);
		set_state(START_STATE);
		}
break;